-- OpenWrt Lua 路径转正则表达式模块
-- 兼容Lua 5.1，支持动态路由参数解析

local _M = {}

-- 主要转换函数
-- @param path 路径模式 (如 "/users/:id")
-- @param options 配置项 {
--   sensitive = false,  -- 是否大小写敏感
--   strict = false,     -- 是否严格匹配尾部斜线
--   end = true,         -- 是否匹配结束位置
--   keys = false        -- 是否返回keys数组
-- }
function _M.path_to_regex(path, options)
    options = options or {}
    local keys = {}
    local pattern = "^"
    
    -- 处理特殊字符转义
    path = path:gsub("[%.%-%+%?%^%$%[%]%*%%(%)%%]", "%%%0")
    
    -- 解析路径参数
    path = path:gsub(":([%w_]+)", function(name)
        table.insert(keys, { name = name })
        return "([^/]+)"
    end)
    
    -- 处理通配符*
    path = path:gsub("%*", ".*")
    
    -- 构建完整正则
    if options.strict then
        path = path:gsub("/$", "/?")
    end
    
    pattern = pattern .. path
    
    if options["end"] ~= false then
        pattern = pattern .. "$"
    end
    
    -- 处理大小写敏感
    if not options.sensitive then
        pattern = pattern .. "i"
    end
    
    return {
        regex = pattern,
        keys = options.keys and keys or nil
    }
end

-- 快速访问方法
function _M.compile(path)
    return _M.path_to_regex(path, { keys = true })
end

return _M